import listaEnlazada
import unittest


class Pila:
    def __init__(self):
        self.__datos__=listaEnlazada.ListaEnlazada()
    
    def poner(self,elem):
        self.__datos__.agregar(elem,self.__datos__.getTamanio())
    
    def sacar(self):
        elem=self.__datos__.elemento(self.__datos__.getTamanio()-1)
        self.__datos__.eliminar(self.__datos__.getTamanio()-1)
        return elem
        
    def tope(self):
        return self.__datos__.elemento(self.__datos__.getTamanio()-1)
        
    def esVacia(self):
        valor=self.__datos__.esVacia()
        if(valor==True):return True
        else: return False

class Test(unittest.TestCase):

    def testInit(self):
        self.assertIsInstance(Pila(),Pila, "testea creaciona de __datos__")

    def testPoner(self):
        obj=Pila()
        obj.poner(23)
        self.assertFalse(obj.esVacia(), "verifica existencia de elemento")
    
    def testTope(self):
        obj=Pila()
        obj.poner(1)
        obj.poner(2)
        obj.poner(3)
        print obj.tope()
        self.assertEquals(obj.tope(),3, "verifica existencia del dato")
    
    def testSacar(self):
        obj=Pila()
        obj.poner(5)
        self.assertFalse(obj.esVacia(), "verifica existencia de elemento")
        elim=obj.sacar()
        self.assertTrue(obj.esVacia, "verifica la no existencia de elemento")
        self.assertEquals(elim, 5,"elemento eliminado")
    
    def testEsVacia(self):
        obj=Pila()
        self.assertTrue(obj.esVacia(), "Verifica devolucion correcta")
        obj.poner(1)
        self.assertFalse(obj.esVacia(), "Verifica devolucion correcta")
    
    def testIncluye(self):
        obj=Pila()
        obj.poner(1)
        obj.poner(2)
        obj.poner(3)
        self.assertTrue(obj.__datos__.incluye(2), "Verifica devolucion correcta")
        self.assertFalse(obj.__datos__.incluye(4), "Verifica devolucion correcta")

    def testGetTamanio(self):
        obj=Pila()
        obj.poner(1)
        obj.poner(2)
        obj.poner(3)
        self.assertTrue(obj.__datos__.getTamanio()==3,"Verifica devolucion correcta del tamanio")
        
        
if __name__ == "__main__":
    #import sys;sys.argv = ['', 'Test.testName']
    unittest.main()